iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
佛心分享-刷題不只是刷題

CPE C++ 刷題系列 第 28

CPE C++ 刷題 Day 28

  • 分享至 

  • xImage
  •  

今天來解YKL32(UVA10008):What's Cryptanalysis?

What's Cryptanalysis?

https://ithelp.ithome.com.tw/upload/images/20241012/20155574xDTbK1XR2s.png

題目的Input和Output就很值觀

使用 sort() 函數對 vector 進行排序。排序規則如下:

如果兩個字母的出現次數相同,則按照字母表順序進行排序(a.first < b.first)。
如果出現次數不同,則按照出現次數從大到小排序(a.second > b.second)。

sort(letterVec.begin(), letterVec.end(), [](const pair<char, int>& a, const pair<char, int>& b) {
    if (a.second == b.second) {
        return a.first < b.first;  
    }
    return a.second > b.second;  
});
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <ctype.h>
using namespace std;

int main() {
    int n;
    cin >> n; 
    map<char, int> letter;

    while (n>=0) {
        string str;
        getline(cin, str);

        for (int i = 0; i < str.size(); i++) {
            if (isalpha(str[i])) {  
                letter[toupper(str[i])]++;  
                //cout << "text : " << str[i] << endl;
            }
        }
        n--;
    }

    // 將 map 轉換為 vector 來排序
    vector<pair<char, int>> letterVec(letter.begin(), letter.end());

    // 根據出現次數由大到小排序;如果次數相同,按字母表順序排序
    sort(letterVec.begin(), letterVec.end(), [](const pair<char, int>& a, const pair<char, int>& b) {
        if (a.second == b.second) {
            return a.first < b.first;  
        }
        return a.second > b.second;  
    });
    
    for (const auto& pair : letterVec) {
        cout << pair.first << " " << pair.second << endl;
    }

    return 0;
}


上一篇
CPE C++ 刷題 Day 27
下一篇
CPE C++ 刷題 Day 29
系列文
CPE C++ 刷題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言